﻿using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows;
using System.Runtime.InteropServices;
using Microsoft.VisualStudio.Shell.Interop;
using Microsoft.VisualStudio.Shell;
using SkypeStudio.Framework;
using SkypeStudio.Controls.ViewModels;
using SkypeStudio.Controls.Views;
using SkypeStudio.Controls.Services;
using SkypeStudio.Controls.Model;

namespace PongsathonKeng.SkypeStudio
{
    /// <summary>
    /// This class implements the tool window exposed by this package and hosts a user control.
    ///
    /// In Visual Studio tool windows are composed of a frame (implemented by the shell) and a pane, 
    /// usually implemented by the package implementer.
    ///
    /// This class derives from the ToolWindowPane class provided from the MPF in order to use its 
    /// implementation of the IVsUIElementPane interface.
    /// </summary>
    [Guid("a1e7551f-c695-4f91-8346-8577240115f3")]
    public class SkypeStudioToolWindow : ToolWindowPane
    {
        /// <summary>
        /// Standard constructor for the tool window.
        /// </summary>
        public SkypeStudioToolWindow() :
            base(null)
        {
            // Set the window title reading it from the resources.
            this.Caption = Resources.ToolWindowTitle;
            // Set the image that will appear on the tab of the window frame
            // when docked with an other window
            // The resource ID correspond to the one defined in the resx file
            // while the Index is the offset in the bitmap strip. Each image in
            // the strip being 16x16.
            this.BitmapResourceID = 301;
            this.BitmapIndex = 1;

            // This is the user control hosted by the tool window; Note that, even if this class implements IDisposable,
            // we are not calling Dispose on this object. This is because ToolWindowPane calls Dispose on 
            // the object returned by the Content property.
            // base.Content = new MyControl();
            try
            {
                SkypeStudioApplication application = new SkypeStudioApplication();
                application.Initialize();

                ISkypeStudioWindowView shellView = IoC.Get<ISkypeStudioWindowView>();
                ISkypeApplicationService skypeAplicationService = IoC.Get<ISkypeApplicationService>();

                var skypeStudioWindowViewModel = new SkypeStudioWindowViewModel(shellView);
               
                skypeAplicationService.ClientStart();

                var contactListView = new ContactListViewModel(IoC.Get<IContactListView>(), skypeAplicationService);
                var skypeToolBarViewModel = new SkypeToolBarViewModel(IoC.Get<ISkypeToolBarView>(), skypeAplicationService);
                var sendMessageViewModel = new SendMessageViewModel(IoC.Get<ISendMessageView>(), skypeAplicationService);
                var chatListViewModel = new ChatListViewModel(IoC.Get<IChatListView>(), skypeAplicationService);

                skypeStudioWindowViewModel.ContactListView = contactListView.View;
                skypeStudioWindowViewModel.SkypeTooBarView = skypeToolBarViewModel.View;
                skypeStudioWindowViewModel.SendMessageView = sendMessageViewModel.View;
                skypeStudioWindowViewModel.ChatListView = chatListViewModel.View;

                base.Content = skypeStudioWindowViewModel.View;
            }
            catch (Exception ex)
            {

            }
        }

        //void ContactListViewRequestStartChat(System.Collections.Generic.IEnumerable<Contact> obj)
        //{
        //    throw new NotImplementedException();
        //}

        //void chatListViewModel_RequestOpendChat(Chat C)
        //{
           
        //}
    }
}
